﻿/*
 面临一个复杂对象的创建工作，通常由各个部分的子对象用一定的算法构成。
子部件（对象）比较多，对象不能当作一个完整的对象或者产品使用（邮件：发件人，收件人、抄送人、主题、邮件内容）
子部件需要按照一定的顺序赋值才有一定的意义，在某个子部件没有赋值之前，另一个子部件就无法赋值。
例子：用组装电脑来说明

1、CPU，主板、硬盘、内存、显示器
2、各个组件的性价比
 */
//初级版本
using _06建造者设计模式;

Computer computer = new Computer();
computer.AddPart("i5的cpu");
computer.AddPart("256G的硬盘");
computer.AddPart("32G的内存");
computer.AddPart("17寸的显示器");
computer.AddPart("win7的操作系统");
computer.ShowComputer();
/*
 浪费时间和精力，所有内容全部需要客户搞定
创建对象和客户端强耦合
 */

Console.WriteLine("建造者设计模式正式登场");
//abstractBuilder(抽象建造者)、ConcreteBuilder(具体建造者)、product(具体产品)、 Director(指挥者)
IBuilderComputer b1=new GoodComputer();
IBuilderComputer b2 = new BadComputer();
MyDirectory directory = new MyDirectory();
directory.BuildComputer(b1);
 var goodComputer= b1.GetComputer();
goodComputer.ShowComputer(); 

directory.BuildComputer(b2);    
var badComputer=  b2.GetComputer();
badComputer.ShowComputer(); 